গ্রাফ ট্রাভার্সাল: DFS, BFS

গ্রাফস (Graphs) - ডাটা স্ট্রাকচার & অ্যালগরিদম (Data Structure & Algorithms) - Computer Science

259

গ্রাফ ট্রাভার্সাল (Graph Traversal)

গ্রাফ ট্রাভার্সাল হল একটি প্রক্রিয়া যা গ্রাফের সকল নোড (vertices) এবং এজ (edges) পরিদর্শন করে। গ্রাফ ট্রাভার্সালের দুটি প্রধান পদ্ধতি হল ডেপথ-ফার্স্ট সার্চ (DFS) এবং ব্রেডথ-ফার্স্ট সার্চ (BFS)

১. ডেপথ-ফার্স্ট সার্চ (DFS)

বর্ণনা

ডেপথ-ফার্স্ট সার্চ (DFS) হল একটি ট্রাভার্সাল কৌশল যা একটি নোড থেকে শুরু করে তার সর্বাধিক গভীরে প্রবেশ করে যতক্ষণ না এটি একটি শেষ নোড (leaf node) খুঁজে পায়। এরপরে এটি ব্যাকট্র্যাক করে এবং অন্য নোডগুলিতে চলে যায়। DFS সাধারণত স্ট্যাকের মাধ্যমে কার্যকর হয়।

পদ্ধতি

  1. শুরু নোড থেকে প্রবেশ করুন এবং তাকে ভিজিট করুন।
  2. সংযুক্ত নোডগুলির মধ্যে যেকোন একটি নোডে প্রবেশ করুন এবং তাকে ভিজিট করুন।
  3. যদি আরও সংযুক্ত নোড থাকে তবে ধাপ 2 অনুসরণ করুন।
  4. কোনও নোডের সকল সংযুক্ত নোড ভিজিট হয়ে গেলে ব্যাকট্র্যাক করুন।

উদাহরণ কোড (Python):

def dfs(graph, node, visited):
    if node not in visited:
        print(node, end=' ')
        visited.add(node)
        for neighbor in graph[node]:
            dfs(graph, neighbor, visited)

# গ্রাফের উদাহরণ
graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F'],
    'D': [],
    'E': ['F'],
    'F': []
}

visited = set()
print("DFS Traversal:")
dfs(graph, 'A', visited)  # Output: A B D E F C

২. ব্রেডথ-ফার্স্ট সার্চ (BFS)

বর্ণনা

ব্রেডথ-ফার্স্ট সার্চ (BFS) হল একটি ট্রাভার্সাল কৌশল যা একটি নোড থেকে শুরু করে তার সবার নিকটবর্তী নোডগুলিকে প্রথমে পরিদর্শন করে। এটি সাধারণত কিউ (queue) ডেটা স্ট্রাকচার ব্যবহার করে।

পদ্ধতি

  1. শুরু নোডকে কিউতে যুক্ত করুন এবং ভিজিট করুন।
  2. কিউ থেকে একটি নোড বের করুন এবং তার সকল নোডকে কিউতে যুক্ত করুন।
  3. কিউ খালি না হওয়া পর্যন্ত ধাপ 2 পুনরাবৃত্তি করুন।

উদাহরণ কোড (Python):

from collections import deque

def bfs(graph, start):
    visited = set()
    queue = deque([start])

    while queue:
        node = queue.popleft()
        if node not in visited:
            print(node, end=' ')
            visited.add(node)
            queue.extend(graph[node] - visited)

# গ্রাফের উদাহরণ
print("\nBFS Traversal:")
bfs(graph, 'A')  # Output: A B C D E F

তুলনা: DFS বনাম BFS

বৈশিষ্ট্যDFSBFS
ডেটা স্ট্রাকচারস্ট্যাক (stack)কিউ (queue)
অপেক্ষাকৃত গভীরতাসর্বাধিক গভীরে প্রবেশ করেপ্রথমে নিকটবর্তী নোডগুলি ভিজিট করে
স্পেস কমপ্লেক্সিটিO(h) (h = উচ্চতা)O(w) (w = সর্বাধিক প্রস্থ)
ব্যবহারসাইকেল খোঁজা, গাছের ট্রাভার্সালShortest Path Finding

উপসংহার

DFS এবং BFS হল গ্রাফ ট্রাভার্সালের মৌলিক পদ্ধতি যা বিভিন্ন পরিস্থিতিতে বিভিন্ন ব্যবহার রয়েছে। DFS সাধারণত গভীরতা ভিত্তিক অনুসন্ধানে ব্যবহৃত হয়, যখন BFS সর্বাধিক নিকটবর্তী নোডগুলি অনুসন্ধানের জন্য কার্যকর। প্রতিটি পদ্ধতির সময় এবং স্থান জটিলতা ভিন্ন, তাই সমস্যা অনুসারে সঠিক পদ্ধতি নির্বাচন করা গুরুত্বপূর্ণ।

Promotion

Are you sure to start over?

Loading...